if(typeof(BaseUtil)=="undefined" || !BaseUtil){
    BaseUtil={};
}

(function(exports){
    var options = {
        defaultResultErrorCallback: function (msg, result) {

        },
        defaultResultSuccessCallback : function (msg, result) {

        }
    }

    /**
     * 封装ajax post方法
     * @param url 访问路径
     * @param data 参数
     * @param success 成功回调
     * @param error 失败回调
     */
    function doPost(url, data, success, error) {
        $.post(url, data, function (result,status,xhr) {
            if(typeof(result.code)=="undefined") { // 非返回对象结构书
                if(typeof(success) == "function") {
                    var re = success.call(this, "", result, {code: 0, data: result});
                    if(!(re===false) && typeof(exports.options.defaultResultSuccessCallback)=="function"){
                        exports.options.defaultResultSuccessCallback.call(this, "", result, {code: 0, data: result});
                    }
                }
                return;
            }
            if(result.code == 0) { // 访问成功
                var successRe = true;
                if(typeof(success) == "function") {
                    successRe = success.call(this, result.message, result.data, result);
                }
                if((!(successRe===false)) && typeof(exports.options.defaultResultSuccessCallback)=="function"){
                    exports.options.defaultResultSuccessCallback.call(this, result.message, result.data, result);
                }
            } else {
                var errorRe = true;
                if(typeof(error) == "function") {
                    errorRe = error.call(this, result.message, result.data, result);
                }
                if((!(errorRe===false)) && typeof(exports.options.defaultResultErrorCallback)=="function"){
                    exports.options.defaultResultErrorCallback.call(this, result.message, result.data, result);
                }
            }
        }, "json");
    }

    /**
     * 如果对象是jQuery的实例,也将返回true
     * 判断字符串是否是选择器.
     * 注意:
     * 	仅判断3种类型选择器  ID/Class/Attr
     *
     *
     * 选择器长度必须小于120
     */
    function isSelector(sel){
        if(sel instanceof jQuery)return true;
        if(typeof(sel)=="string"){
            sel=$.trim(sel);
            if(/\w*#\w+/.test(sel)||/\w*\.\w+/.test(sel)||/\[\w+([!\^\$\*]?\=['"]?\w+['"]?)?\]/.test(sel))
                return true;
        }
        return false;
    }

    /**
     * 获取ResultMsg结构中的数据列表,数据可能是对象或列表或分页数据
     * 普通数据: 必须是列表
     * ResultMsg携带数据支持: 分页数据/数组数据
     * 返回结果都是数组
     */
    function getResultDataList(result){	//
        if(!result)return [];
        var data=result;
        if(typeof(result.errorCode)!="undefined"){
            data=result.data;
        }
        if(!data)return [];
        if($.isArray(data))return data;
        if(typeof(data.totalElements)!="undefined")return data.content||[];
        console.log(result);
        throw "未知数据格式";
    }

    /**
     * 获取当前框架页的frame节点元素
     * 获取当前页面所在的frame或iframe节点,如果不在框架中,则返回null
     * 参数:
     * 	win		默认空表示当前win
     */
    function getCurrentFrame(win){
        if(win){
            return win.frameElement;
        }
        return window.self.frameElement;
    }
    /**
     * 判断当前是否在一个frame或iframe页面中
     */
    function isCurrentInFrame(){
        return getCurrentFrame()?true:false;
    }
    /**
     * 获取框架页frame或iframe的window对象
     */
    function getFrameWindow(selector){
        var t=BaseUtil.getJQuery(selector);
        var frame=t.get(0);
        if(frame)return frame.contentWindow;
        return null;
    }

    exports.options=options;
    exports.doPost=doPost;
    exports.isSelector=isSelector;
    exports.getResultDataList=getResultDataList;
    exports.getCurrentFrame=getCurrentFrame;
    exports.isCurrentInFrame=isCurrentInFrame;
    exports.getFrameWindow=getFrameWindow;
})(BaseUtil);

